SciChart WPF 3D Charts > 3D Chart Types > The Impulse 3D Chart Type
The Impulse 3D Chart Type

3D Impulse or Stem Charts are provided by the ImpulseRenderableSeries3D type.

A stem chart is visualized by small stems pointing up or down to a value with a sphere or marker at the top.

 

 

Declaring a 3D Impulse Chart

The ImpulseRenderableSeries3D accepts either XyzDataSeries3D for sparse points, Or UniformGridDataSeries3D for an NxM array of points.

The above graph is rendered with the following code:

<s3D:SciChart3DSurface x:Name="SciChart"
                       BorderThickness="0"
                       WorldDimensions="200,100,200">
    <s3D:SciChart3DSurface.RenderableSeries>
        <s3D:ImpulseRenderableSeries3D x:Name="ImpulseSeries3D"
                                       Opacity="1"
                                       >
            <s3D:ImpulseRenderableSeries3D.PointMarker>
                <s3D:SpherePointMarker3D Fill="Blue" Size="4.0" Opacity="1"/>
            </s3D:ImpulseRenderableSeries3D.PointMarker>
        </s3D:ImpulseRenderableSeries3D>
    </s3D:SciChart3DSurface.RenderableSeries>
    <s3D:SciChart3DSurface.XAxis>
        <s3D:NumericAxis3D />
    </s3D:SciChart3DSurface.XAxis>
    <s3D:SciChart3DSurface.YAxis>
        <s3D:NumericAxis3D VisibleRange="0, 0.5"/>
    </s3D:SciChart3DSurface.YAxis>
    <s3D:SciChart3DSurface.ZAxis>
        <s3D:NumericAxis3D />
    </s3D:SciChart3DSurface.ZAxis>
</s3D:SciChart3DSurface>
private void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
{
    const int Count = 15;
    var uniformDataSeries = new UniformGridDataSeries3D<double>(Count, Count)
    {
        StepX = 1,
        StepZ = 1,
        SeriesName = "Impulse Series 3D",
    };
    for (var x = 0; x < Count; x++)
    {
        for (var z = 0; z < Count; z++)
        {
            var y = Math.Sin(x*0.25) / ((z + 1) * 2);
            uniformDataSeries[z,x] = y;
        }
    }
    ImpulseSeries3D.DataSeries = uniformDataSeries;
}

However it could be just as easily created with an XyzDataSeries3D as the DataSeries for sparse columns.

 

Single Row Impulse 3D Charts

By changing a few parameters, it is possible to get a column chart to look like this:

 

The code to achieve the above is as follows:

<s3D:SciChart3DSurface x:Name="SciChart"
                       BorderThickness="0"
                       WorldDimensions="200,100,20"> <!-- Change WorldDimensions Size -->
    <s3D:SciChart3DSurface.RenderableSeries>
        <s3D:ImpulseRenderableSeries3D x:Name="ImpulseSeries3D"
                                       Opacity="1">
            <s3D:ImpulseRenderableSeries3D.PointMarker>
                <s3D:SpherePointMarker3D Fill="Blue" Size="4.0" Opacity="1"/>
            </s3D:ImpulseRenderableSeries3D.PointMarker>
        </s3D:ImpulseRenderableSeries3D>
    </s3D:SciChart3DSurface.RenderableSeries>
    <s3D:SciChart3DSurface.XAxis>
        <s3D:NumericAxis3D />
    </s3D:SciChart3DSurface.XAxis>
    <s3D:SciChart3DSurface.YAxis>
        <s3D:NumericAxis3D VisibleRange="0, 0.5"/>
    </s3D:SciChart3DSurface.YAxis>
    <s3D:SciChart3DSurface.ZAxis>
        <s3D:NumericAxis3D DrawLabels="False"/> <!-- set DrawLabels False -->
    </s3D:SciChart3DSurface.ZAxis>
</s3D:SciChart3DSurface>
private void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
{
    // Change size from 15 to 1 in Z direction
    const int Count = 15;
    var uniformDataSeries = new UniformGridDataSeries3D<double>(Count, 1)
    {
        StepX = 1,
        StepZ = 1,
        SeriesName = "Column 3D Data",
    };
    for (var x = 0; x < Count; x++)
    {
        for (var z = 0; z < 1; z++)
        {
            var y = Math.Sin(x * 0.25) / ((z + 1) * 2);
            uniformDataSeries[z, x] = y;
        }
    }

    SciChart.RenderableSeries[0].DataSeries = uniformDataSeries;
}

 

 

3D Impulse Shapes

The shape at the top of the stem can be defined by one of several pointmarkers, including:

Apply the Type of point marker to the ImpulseRenderableSeries3D.PointMarker property to change the shape.